package com.tarena.luban.demo.order.dubbo;

import com.tarena.luban.demo.stock.api.DubboTestApi;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.springframework.context.annotation.Bean;

public class DubboConsumer {
    /**
     * 模拟客户端调用的位置 客户端dubbo调用一般是在spring容器中的 业务层
     * 注入对象使用.
     * @param args
     */
    public static void main(String[] args) {
        DubboTestApi proxy = getProxy();
        String result = proxy.sayHi("王翠花");
        System.out.println("获取调用结果:"+result);

    }
    // dubbo客户端代理对象的创建工作
    public static DubboTestApi getProxy(){
        //到注册中心 获取信息 建立连接 调用目标接口方法
        ReferenceConfig<DubboTestApi> consuermConfig=new ReferenceConfig<>();
        consuermConfig.setInterface(DubboTestApi.class);
        //dubbo 启动对象 设置几乎和服务提供者一样的参数 获取一个代理
        DubboBootstrap boot=DubboBootstrap.getInstance();
        //应用名称
        boot.application("order-consumer");
        //注册中心
        boot.registry(new RegistryConfig("nacos://localhost:8848"));
        //设置调用信息 接口配置
        boot.reference(consuermConfig);
        //获取代理
        DubboTestApi dubboTestApi = consuermConfig.get();
        //打印返回的接口类型
        System.out.println("consumer获取的对象实际类型:"+dubboTestApi.getClass().getName());
        return dubboTestApi;
    }
}
